import pool from '../DB/db.js'
const getAllTasks = async (req, result) => {
  // 查询数据
  const selectSql = 'SELECT * FROM task;'
  pool.all(selectSql, [], (err, rows) => {
    if (err) {
      result.status(500).json(err)
    } else {
      result.status(200).json(rows)
    }
  })
}
/* 向指定表格插入数据
 *
 * @param {string} table - 要插入数据的表格名称
 * @param {Object} tableData - 要插入的数据，键为列名，值为要插入的值
 * @param {Object} result - 用于返回HTTP响应的对象
 */
const insertDataFn = (table, tableData, result) => {
  // 将tableData对象的键名提取出来，并用逗号连接成字符串
  const keys = Object.keys(tableData).join(', ')
  // 将tableData对象的值提取出来，用于SQL语句中的值部分
  const values = Object.values(tableData)
  // 生成占位符字符串，用于SQL语句中的值部分，每个占位符为'?'，数量与keys中键名数量相同
  const replace = Object.keys(tableData)
    .map(() => '?')
    .join(', ')
  // 构造插入数据的SQL语句
  const insertSql = `INSERT INTO ${table} (${keys}) VALUES (${replace});`
  // 执行SQL语句
  pool.run(insertSql, values, function (err) {
    if (err) {
      console.error('Insertion failed: ' + err.message)
      // 如果执行失败，返回错误信息
      result && result.status(500).json(err)
    } else {
      console.log(`Inserted data with rowid ${this.lastID}`)
      // 如果执行成功，返回成功信息，并记录插入数据的行ID
      result && result.status(200).json({ res_code: 0, res_message: '创建成功' })
    }
  })
}
// 更新数据
const updateDataFn = (table, updateKey, updateData, result) => {
  const updateKeyValue = updateData[updateKey]
  const { update_time = '', ...updates } = updateData
  delete updates[updateKey]
  const setClause = Object.keys(updates)
    .map((key) => `${key} = ?`)
    .join(', ')
  const values = Object.values(updates)
  const updateSql = `UPDATE ${table} SET ${setClause}, update_time = datetime('now', '+8 hours') WHERE ${updateKey} = ?`
  const updateValues = [...values, updateKeyValue]
  pool.run(updateSql, updateValues, function (err) {
    if (err) {
      console.error('Update failed: ' + err.message)
      result && result.status(500).json(err)
    } else {
      //   console.log(`Updated ${this.changes} row(s)`)
      result && result.status(200).json({ res_code: 0, res_message: '更新成功' })
    }
  })
}
const InsertOrUpdateFn = async (table, updateKey, updateData, result) => {
  const updateKeyValue = updateData[updateKey]
  const selectSql = `SELECT * FROM ${table} WHERE ${updateKey} = ?;`
  // 执行查询
  pool.get(selectSql, [updateKeyValue], (err, row) => {
    if (err) {
      console.error('查询数据失败:', err.message)
      return
    }
    if (row) {
      //   console.log('找到了匹配的记录:', row)
      updateDataFn(table, updateKey, updateData, result)
      // 根据需要进行更新或其他操作
    } else {
      //   console.log('没有找到匹配的记录')
      insertDataFn(table, updateData, result)
      // 根据需要进行插入或其他操作
    }
  })
}
const getAllData = async (table, result) => {
  // 查询数据
  const selectSql = `SELECT * FROM ${table};`
  pool.all(selectSql, [], (err, rows) => {
    if (err) {
      result && result.status(500).json(err)
      console.log('getAllData >>>', err)
    } else {
      result && result.status(200).json(rows)
      //   console.log('getAllData >>>', rows)
    }
  })
}
const selectFn = async (table, key, value, result) => {
  // 查询数据
  const selectSql = `SELECT * FROM ${table} WHERE ${key} = ?;`
  pool.all(selectSql, [value], (err, rows) => {
    if (err) {
      result && result.status(500).json(err)
      console.log('selectFn >>>', err)
    } else {
      result && result.status(200).json(rows)
      //   console.log('selectFn >>>', rows)
    }
  })
}
export default { getAllTasks, insertDataFn, getAllData, updateDataFn, InsertOrUpdateFn, selectFn }
